package com.cskayan.javase.object._0introduction;

/**
 * API的概述
 * API，全称Application Programming Interface，也就是应用程序编程接口。
 * 这个接口，我们在接口那一章节中，已经说过了。
 *      此接口并不是Java语法中的interface，而是指一些已经预先定义好的，暴露给外界使用的方法或者工具。
 *      API的学习，其实主要就是学习方法的调用，本质上非常简单。
 *      到这里，我们面向对象当中，繁杂的概念还写不出几行代码的窘境就会差不多结束了。
 *      学习一些API后，我们就可以写出一些代码了。
 * API的作用是：开发者可以在不关注具体实现细节的前提下，使用这些已经预先定义好的类和工具实现自己的需求。
 * 像官方JDK中的API，我们可以通过官方JDK文档去学习，或者百度搜索一下去学习。而以后公司，程序员之间互相交流接口，就需要依赖于公司的API文档。所以写文档，也是程序员的必备技能.
 *
 *
 * Object类概述
 * Object类，虽然我们没有详细了解，但我们知道了：
 * Object类是所有类继承层次的祖先类，Java中所有类（包括数组）都直接或者间接的继承自该类，都实现了该类的方法。
 *
 * 自定义类时，我们并不需要特别的标注extends Object，这是一个隐式的继承。如果一个类没有明确的指出它的父类，Object类就默认是这个类的父类，extends Object则已经隐含了，不需要写出来。
 *
 * Object是没有成员变量定义的，并且由于子类对象的隐式初始化，Object类有且仅有一个默认提供的无参构造方法。
 * 所以我们学习Object类，主要关注它的成员方法。
 * Object的成员方法中，提供给外界访问权限的有：
 *      1,public final Class getClass() 这个方法是获取Class对象的,而Class对象是反射的基础
 *      2,public String toString() 将对象转换成字符串形式
 *      3,public boolean equals(Object obj) 比较对象相等(这里牵扯到比较的规则)
 *      4,public int hashCode() 和哈希表有关,用于计算哈希值
 *      5.protected void finalize() 这是一个没有用的方法,仅做了解
 *          注解: @Deprecated
 *          这个注解用于标记过时的,不推荐使用的,弃用的方法或者类
 *          在Java9当中,finalize()已经被注解@Deprecated标记了
 *          正常的Java开发,不应该使用过时的方法
 *              这些已经过时的方法或类,一般Java都会提供替代品
 *
 *      6.protected Object clone()
 *              就是克隆,复制一个对象
 *              并且这个对象和原先的对象一模一样.
 *              克隆是Java中独立于new对象方式的一种创建对象的方式
 *
 *
 * 注：像notify()、wait()等成员方法，它们虽然也是public修饰的，但它们都和Java的线程有关系，多线程中再学习。
 *
 * @since 14:37
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // test方法已经过时了
        test();
    }

    @Deprecated
    public static void test(){}
}
